{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "C__5qIgmawER",
    "outputId": "945e1e48-bd72-4ab3-e820-efbb4984d1da"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: dask-ml in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (0.2.0)\n",
      "Requirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (0.24.2)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (19.0)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (0.43.1)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (1.18.1)\n",
      "Requirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (2.9.2)\n",
      "Requirement already satisfied: scikit-learn>=0.21 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (0.22.1)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (2.9.3)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (0.6.0)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml) (1.2.1)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-glm>=0.2.0->dask-ml) (0.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml) (2018.9)\n",
      "Requirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml) (2.7.5)\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml) (1.14.0)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml) (2.3.1)\n",
      "Requirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml) (0.28.0)\n",
      "Requirement already satisfied: toolz>=0.7.3; extra == \"array\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (0.9.0)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (0.3.10)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml) (0.6.2)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.21->dask-ml) (0.14.1)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (0.1.4)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (7.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (5.1)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (0.6.1)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (40.8.0)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (2.1.0)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (5.6.1)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (6.0.2)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml) (1.3.2)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml) (0.2.0)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml) (1.0.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install dask-ml"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: dask in /home/avinash/anaconda3/lib/python3.7/site-packages (2.9.2)\r\n"
     ]
    }
   ],
   "source": [
    "!pip install dask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 0,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "6qeaq3e2awFf",
    "outputId": "2b0dc82e-d614-48b9-ce75-756c73b9aba6"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: dask-ml[xgboost] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.2.0)\n",
      "Collecting distributed>=2.4.0 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/81/b9/b0a57708039a09966296a16df67098fe00f464cefe7bd4f72981ae8879f6/distributed-2.9.3-py3-none-any.whl (588kB)\n",
      "\u001b[K    100% |████████████████████████████████| 593kB 538kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting scikit-learn>=0.21 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/73/db/7d8204ddba84ab5d1e4fd1af8f82bbe39c589488bee71e45c662f4144010/scikit_learn-0.22.1-cp37-cp37m-manylinux1_x86_64.whl (7.0MB)\n",
      "\u001b[K    100% |████████████████████████████████| 7.0MB 336kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (1.2.1)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.43.1)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.6.0)\n",
      "Collecting dask[array,dataframe]>=2.4.0 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/03/fb/d060d926b4e3af64b687f59f907435a9e8497a6f422c2e4aabcd47df2555/dask-2.9.2-py3-none-any.whl (780kB)\n",
      "\u001b[K    100% |████████████████████████████████| 788kB 438kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (0.24.2)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[xgboost]) (19.0)\n",
      "Collecting numpy>=1.17.3 (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/63/0c/0261693cc3ad8e2b66e66dc2d2676a2cc17d3efb1c58a70db73754320e47/numpy-1.18.1-cp37-cp37m-manylinux1_x86_64.whl (20.1MB)\n",
      "\u001b[K    100% |████████████████████████████████| 20.1MB 194kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting xgboost; extra == \"xgboost\" (from dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c1/24/5fe7237b2eca13ee0cfb100bec8c23f4e69ce9df852a64b0493d49dae4e0/xgboost-0.90-py2.py3-none-manylinux1_x86_64.whl (142.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 142.8MB 365kB/s ta 0:00:011\n",
      "\u001b[?25hCollecting dask-xgboost; extra == \"xgboost\" (from dask-ml[xgboost])\n",
      "  Downloading https://files.pythonhosted.org/packages/1c/bd/d69f0546e7652daa7717aa44ef5346e023e7dd6cc6a50e397872dee27add/dask_xgboost-0.1.9-py2.py3-none-any.whl\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-glm>=0.2.0->dask-ml[xgboost]) (0.8.0)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (6.0.2)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (1.3.2)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (2.1.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.6.1)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (5.6.1)\n",
      "Requirement already satisfied: toolz>=0.7.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.9.0)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (40.8.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (5.1)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (0.1.4)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[xgboost]) (7.0)\n",
      "Collecting joblib>=0.11 (from scikit-learn>=0.21->dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/28/5c/cf6a2b65a321c4a209efcdf64c2689efae2cb62661f8f6f4bb28547cf1bf/joblib-0.14.1-py2.py3-none-any.whl (294kB)\n",
      "\u001b[K    100% |████████████████████████████████| 296kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[xgboost]) (0.28.0)\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from multipledispatch>=0.4.9->dask-ml[xgboost]) (1.12.0)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[xgboost]) (0.3.10)\n",
      "Collecting fsspec>=0.6.0; extra == \"dataframe\" (from dask[array,dataframe]>=2.4.0->dask-ml[xgboost])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/dd/1f/7028dacd3c28f34ce48130aae73a88fa5cc27b6b0e494fcf2739f7954d9d/fsspec-0.6.2-py3-none-any.whl (62kB)\n",
      "\u001b[K    100% |████████████████████████████████| 71kB 1.4MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[xgboost]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[xgboost]) (2018.9)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[xgboost]) (2.3.1)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[xgboost]) (1.0.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[xgboost]) (0.2.0)\n",
      "\u001b[31mtables 3.5.1 requires mock>=2.0, which is not installed.\u001b[0m\n",
      "Installing collected packages: numpy, fsspec, dask, distributed, joblib, scikit-learn, xgboost, dask-xgboost\n",
      "  Found existing installation: numpy 1.16.2\n",
      "    Uninstalling numpy-1.16.2:\n",
      "      Successfully uninstalled numpy-1.16.2\n",
      "  Found existing installation: dask 1.1.4\n",
      "    Uninstalling dask-1.1.4:\n",
      "      Successfully uninstalled dask-1.1.4\n",
      "  Found existing installation: distributed 1.26.0\n",
      "    Uninstalling distributed-1.26.0:\n",
      "      Successfully uninstalled distributed-1.26.0\n",
      "  Found existing installation: scikit-learn 0.20.3\n",
      "    Uninstalling scikit-learn-0.20.3:\n",
      "      Successfully uninstalled scikit-learn-0.20.3\n",
      "Successfully installed dask-2.9.2 dask-xgboost-0.1.9 distributed-2.9.3 fsspec-0.6.2 joblib-0.14.1 numpy-1.18.1 scikit-learn-0.22.1 xgboost-0.90\n",
      "Requirement already satisfied: dask-ml[tensorflow] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (1.18.1)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (19.0)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.43.1)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (2.9.3)\n",
      "Requirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.24.2)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (1.2.1)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.2.0)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.6.0)\n",
      "Requirement already satisfied: scikit-learn>=0.21 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (0.22.1)\n",
      "Requirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[tensorflow]) (2.9.2)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting tensorflow; extra == \"tensorflow\" (from dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1d/56/0dbdae2a3c527a119bec0d5cf441655fe030ce1daa6fa6b9542f7dbd8664/tensorflow-2.1.0-cp37-cp37m-manylinux2010_x86_64.whl (421.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 421.8MB 114kB/s ta 0:00:011   19% |██████▏                         | 80.6MB 1.1MB/s eta 0:05:18    49% |████████████████                | 210.2MB 507kB/s eta 0:06:57    54% |█████████████████▎              | 227.9MB 1.2MB/s eta 0:02:44    66% |█████████████████████▍          | 281.7MB 1.4MB/s eta 0:01:44    73% |███████████████████████▊        | 312.1MB 515kB/s eta 0:03:34    98% |███████████████████████████████▍| 414.1MB 583kB/s eta 0:00:14\n",
      "\u001b[?25hCollecting dask-tensorflow; extra == \"tensorflow\" (from dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/00/a5/6cd58713aacf16fc8ef801e3020894a1faba7710c19c047c3e9582081b20/dask_tensorflow-0.0.2-py2.py3-none-any.whl\n",
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[tensorflow]) (1.12.0)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[tensorflow]) (2.3.1)\n",
      "Requirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[tensorflow]) (0.28.0)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (5.6.1)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (6.0.2)\n",
      "Requirement already satisfied: toolz>=0.7.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.9.0)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.1.4)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (1.3.2)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (40.8.0)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (5.1)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.8.0)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (7.0)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (2.1.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[tensorflow]) (0.6.1)\n",
      "Requirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[tensorflow]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[tensorflow]) (2018.9)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.21->dask-ml[tensorflow]) (0.14.1)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.3.10)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.6.2)\n",
      "Collecting tensorboard<2.2.0,>=2.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/40/23/53ffe290341cd0855d595b0a2e7485932f473798af173bbe3a584b99bb06/tensorboard-2.1.0-py3-none-any.whl (3.8MB)\n",
      "\u001b[K    100% |████████████████████████████████| 3.8MB 984kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting opt-einsum>=2.3.2 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/b8/83/755bd5324777875e9dff19c2e59daec837d0378c09196634524a3d7269ac/opt_einsum-3.1.0.tar.gz (69kB)\n",
      "\u001b[K    100% |████████████████████████████████| 71kB 1.2MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting astor>=0.6.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/c3/88/97eef84f48fa04fbd6750e62dcceafba6c63c81b7ac1420856c8dcc0a3f9/astor-0.8.1-py2.py3-none-any.whl\n",
      "Collecting absl-py>=0.7.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1a/53/9243c600e047bd4c3df9e69cfabc1e8004a82cac2e0c484580a78a94ba2a/absl-py-0.9.0.tar.gz (104kB)\n",
      "\u001b[K    100% |████████████████████████████████| 112kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting protobuf>=3.8.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/4a/14/f5c294f1e36a031f165128c25feba93b3116f15a74398d0b2747ed75744f/protobuf-3.11.2-cp37-cp37m-manylinux1_x86_64.whl (1.3MB)\n",
      "\u001b[K    100% |████████████████████████████████| 1.3MB 1.4MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting tensorflow-estimator<2.2.0,>=2.1.0rc0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/18/90/b77c328a1304437ab1310b463e533fa7689f4bfc41549593056d812fab8e/tensorflow_estimator-2.1.0-py2.py3-none-any.whl (448kB)\n",
      "\u001b[K    100% |████████████████████████████████| 450kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting google-pasta>=0.1.6 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c3/fd/1e86bc4837cc9a3a5faf3db9b1854aa04ad35b5f381f9648fbe81a6f94e4/google_pasta-0.1.8-py3-none-any.whl (57kB)\n",
      "\u001b[K    100% |████████████████████████████████| 61kB 997kB/s ta 0:00:01\n",
      "\u001b[?25hCollecting keras-preprocessing>=1.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/28/6a/8c1f62c37212d9fc441a7e26736df51ce6f0e38455816445471f10da4f0a/Keras_Preprocessing-1.1.0-py2.py3-none-any.whl (41kB)\n",
      "\u001b[K    100% |████████████████████████████████| 51kB 1.2MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting termcolor>=1.1.0 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz\n",
      "Requirement already satisfied: wrapt>=1.11.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (1.11.1)\n",
      "Collecting gast==0.2.2 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/4e/35/11749bf99b2d4e3cceb4d55ca22590b0d7c2c62b9de38ac4a4a7f4687421/gast-0.2.2.tar.gz\n",
      "Collecting grpcio>=1.8.6 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/bc/b3/0052e38c640d52b710e235b15821cc3c61d0065bf54e70a44550ef127349/grpcio-1.26.0-cp37-cp37m-manylinux2010_x86_64.whl (2.4MB)\n",
      "\u001b[K    100% |████████████████████████████████| 2.4MB 1.3MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: wheel>=0.26; python_version >= \"3\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (0.33.1)\n",
      "Collecting keras-applications>=1.0.8 (from tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/71/e3/19762fdfc62877ae9102edf6342d71b28fbfd9dea3d2f96a882ce099b03f/Keras_Applications-1.0.8-py3-none-any.whl (50kB)\n",
      "\u001b[K    100% |████████████████████████████████| 51kB 510kB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[tensorflow]) (1.0.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[tensorflow]) (0.2.0)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Collecting markdown>=2.6.8 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/c0/4e/fd492e91abdc2d2fcb70ef453064d980688762079397f779758e055f6575/Markdown-3.1.1-py2.py3-none-any.whl (87kB)\n",
      "\u001b[K    100% |████████████████████████████████| 92kB 1.8MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting google-auth-oauthlib<0.5,>=0.4.1 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/7b/b8/88def36e74bee9fce511c9519571f4e485e890093ab7442284f4ffaef60b/google_auth_oauthlib-0.4.1-py2.py3-none-any.whl\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.21.0)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (0.14.1)\n",
      "Collecting google-auth<2,>=1.6.3 (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/1c/6d/7aae38a9022f982cf8167775c7fc299f203417b698c27080ce09060bba07/google_auth-1.11.0-py2.py3-none-any.whl (76kB)\n",
      "\u001b[K    100% |████████████████████████████████| 81kB 1.5MB/s ta 0:00:01\n",
      "\u001b[?25hRequirement already satisfied: h5py in /home/avinash/anaconda3/lib/python3.7/site-packages (from keras-applications>=1.0.8->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.9.0)\n",
      "Collecting requests-oauthlib>=0.7.0 (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/a3/12/b92740d845ab62ea4edf04d2f4164d82532b5a0b03836d4d4e71c6f3d379/requests_oauthlib-1.3.0-py2.py3-none-any.whl\n",
      "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (1.24.1)\n",
      "Requirement already satisfied: idna<2.9,>=2.5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2.8)\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (3.0.4)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow]) (2019.11.28)\n",
      "Collecting cachetools<5.0,>=2.0.0 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/08/6a/abf83cb951617793fd49c98cb9456860f5df66ff89883c8660aa0672d425/cachetools-4.0.0-py3-none-any.whl\n",
      "Collecting rsa<4.1,>=3.1.4 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "  Downloading https://files.pythonhosted.org/packages/02/e5/38518af393f7c214357079ce67a317307936896e961e35450b70fad2a9cf/rsa-4.0-py2.py3-none-any.whl\n",
      "Collecting pyasn1-modules>=0.2.1 (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/95/de/214830a981892a3e286c3794f41ae67a4495df1108c3da8a9f62159b9a9d/pyasn1_modules-0.2.8-py2.py3-none-any.whl (155kB)\n",
      "\u001b[K    100% |████████████████████████████████| 163kB 1.1MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting oauthlib>=3.0.0 (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/05/57/ce2e7a8fa7c0afb54a0581b14a65b56e62b5759dbc98e80627142b8a3704/oauthlib-3.1.0-py2.py3-none-any.whl (147kB)\n",
      "\u001b[K    100% |████████████████████████████████| 153kB 1.6MB/s ta 0:00:01\n",
      "\u001b[?25hCollecting pyasn1>=0.1.3 (from rsa<4.1,>=3.1.4->google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"tensorflow\"->dask-ml[tensorflow])\n",
      "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/62/1e/a94a8d635fa3ce4cfc7f506003548d0a2447ae76fd5ca53932970fe3053f/pyasn1-0.4.8-py2.py3-none-any.whl (77kB)\n",
      "\u001b[K    100% |████████████████████████████████| 81kB 1.5MB/s ta 0:00:01\n",
      "\u001b[?25hBuilding wheels for collected packages: opt-einsum, absl-py, termcolor, gast\n",
      "  Building wheel for opt-einsum (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/2c/b1/94/43d03e130b929aae7ba3f8d15cbd7bc0d1cb5bb38a5c721833\n",
      "  Building wheel for absl-py (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/8e/28/49/fad4e7f0b9a1227708cbbee4487ac8558a7334849cb81c813d\n",
      "  Building wheel for termcolor (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/7c/06/54/bc84598ba1daf8f970247f550b175aaaee85f68b4b0c5ab2c6\n",
      "  Building wheel for gast (setup.py) ... \u001b[?25ldone\n",
      "\u001b[?25h  Stored in directory: /home/avinash/.cache/pip/wheels/5c/2e/7e/a1d4d4fcebe6c381f378ce7743a3ced3699feb89bcfbdadadd\n",
      "Successfully built opt-einsum absl-py termcolor gast\n",
      "\u001b[31mtensorboard 2.1.0 has requirement setuptools>=41.0.0, but you'll have setuptools 40.8.0 which is incompatible.\u001b[0m\n",
      "\u001b[31mtensorflow 2.1.0 has requirement scipy==1.4.1; python_version >= \"3\", but you'll have scipy 1.2.1 which is incompatible.\u001b[0m\n",
      "Installing collected packages: grpcio, markdown, oauthlib, requests-oauthlib, cachetools, pyasn1, rsa, pyasn1-modules, google-auth, google-auth-oauthlib, absl-py, protobuf, tensorboard, opt-einsum, astor, tensorflow-estimator, google-pasta, keras-preprocessing, termcolor, gast, keras-applications, tensorflow, dask-tensorflow\n",
      "Successfully installed absl-py-0.9.0 astor-0.8.1 cachetools-4.0.0 dask-tensorflow-0.0.2 gast-0.2.2 google-auth-1.11.0 google-auth-oauthlib-0.4.1 google-pasta-0.1.8 grpcio-1.26.0 keras-applications-1.0.8 keras-preprocessing-1.1.0 markdown-3.1.1 oauthlib-3.1.0 opt-einsum-3.1.0 protobuf-3.11.2 pyasn1-0.4.8 pyasn1-modules-0.2.8 requests-oauthlib-1.3.0 rsa-4.0 tensorboard-2.1.0 tensorflow-2.1.0 tensorflow-estimator-2.1.0 termcolor-1.1.0\n",
      "Requirement already satisfied: dask-ml[complete] in /home/avinash/anaconda3/lib/python3.7/site-packages (1.2.0)\n",
      "Requirement already satisfied: scipy in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (1.2.1)\n",
      "Requirement already satisfied: multipledispatch>=0.4.9 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.6.0)\n",
      "Requirement already satisfied: scikit-learn>=0.21 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.22.1)\n",
      "Requirement already satisfied: packaging in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (19.0)\n",
      "Requirement already satisfied: numba in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.43.1)\n",
      "Requirement already satisfied: dask[array,dataframe]>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.9.2)\n",
      "Requirement already satisfied: distributed>=2.4.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.9.3)\n",
      "Requirement already satisfied: numpy>=1.17.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (1.18.1)\n",
      "Requirement already satisfied: dask-glm>=0.2.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.2.0)\n",
      "Requirement already satisfied: pandas>=0.23.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.24.2)\n",
      "Requirement already satisfied: dask-xgboost; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.1.9)\n",
      "Requirement already satisfied: dask-tensorflow; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.0.2)\n",
      "Requirement already satisfied: xgboost; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (0.90)\n",
      "Requirement already satisfied: tensorflow; extra == \"complete\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask-ml[complete]) (2.1.0)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Requirement already satisfied: six in /home/avinash/anaconda3/lib/python3.7/site-packages (from multipledispatch>=0.4.9->dask-ml[complete]) (1.12.0)\n",
      "Requirement already satisfied: joblib>=0.11 in /home/avinash/anaconda3/lib/python3.7/site-packages (from scikit-learn>=0.21->dask-ml[complete]) (0.14.1)\n",
      "Requirement already satisfied: pyparsing>=2.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from packaging->dask-ml[complete]) (2.3.1)\n",
      "Requirement already satisfied: llvmlite>=0.28.0dev0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from numba->dask-ml[complete]) (0.28.0)\n",
      "Requirement already satisfied: toolz>=0.7.3; extra == \"array\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.9.0)\n",
      "Requirement already satisfied: partd>=0.3.10; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.3.10)\n",
      "Requirement already satisfied: fsspec>=0.6.0; extra == \"dataframe\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.6.2)\n",
      "Requirement already satisfied: zict>=0.1.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.1.4)\n",
      "Requirement already satisfied: click>=6.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (7.0)\n",
      "Requirement already satisfied: msgpack in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.6.1)\n",
      "Requirement already satisfied: tornado>=5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (6.0.2)\n",
      "Requirement already satisfied: psutil>=5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (5.6.1)\n",
      "Requirement already satisfied: pyyaml in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (5.1)\n",
      "Requirement already satisfied: tblib in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (1.3.2)\n",
      "Requirement already satisfied: cloudpickle>=0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (0.8.0)\n",
      "Requirement already satisfied: sortedcontainers!=2.0.0,!=2.0.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: setuptools in /home/avinash/anaconda3/lib/python3.7/site-packages (from distributed>=2.4.0->dask-ml[complete]) (40.8.0)\n",
      "Requirement already satisfied: python-dateutil>=2.5.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[complete]) (2.8.0)\n",
      "Requirement already satisfied: pytz>=2011k in /home/avinash/anaconda3/lib/python3.7/site-packages (from pandas>=0.23.4->dask-ml[complete]) (2018.9)\n",
      "Requirement already satisfied: termcolor>=1.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.1.0)\n",
      "Requirement already satisfied: google-pasta>=0.1.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.1.8)\n",
      "Requirement already satisfied: keras-applications>=1.0.8 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.0.8)\n",
      "Requirement already satisfied: absl-py>=0.7.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.9.0)\n",
      "Requirement already satisfied: wheel>=0.26; python_version >= \"3\" in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.33.1)\n",
      "Requirement already satisfied: wrapt>=1.11.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.11.1)\n",
      "Requirement already satisfied: opt-einsum>=2.3.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.0)\n",
      "Requirement already satisfied: tensorflow-estimator<2.2.0,>=2.1.0rc0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: gast==0.2.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.2.2)\n",
      "Requirement already satisfied: astor>=0.6.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (0.8.1)\n",
      "Requirement already satisfied: protobuf>=3.8.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (3.11.2)\n",
      "Requirement already satisfied: grpcio>=1.8.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.26.0)\n",
      "Requirement already satisfied: keras-preprocessing>=1.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (1.1.0)\n",
      "Requirement already satisfied: tensorboard<2.2.0,>=2.1.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorflow; extra == \"complete\"->dask-ml[complete]) (2.1.0)\n",
      "Requirement already satisfied: locket in /home/avinash/anaconda3/lib/python3.7/site-packages (from partd>=0.3.10; extra == \"dataframe\"->dask[array,dataframe]>=2.4.0->dask-ml[complete]) (0.2.0)\n",
      "Requirement already satisfied: heapdict in /home/avinash/anaconda3/lib/python3.7/site-packages (from zict>=0.1.3->distributed>=2.4.0->dask-ml[complete]) (1.0.0)\n",
      "Requirement already satisfied: h5py in /home/avinash/anaconda3/lib/python3.7/site-packages (from keras-applications>=1.0.8->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.9.0)\n",
      "Requirement already satisfied: markdown>=2.6.8 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.1)\n",
      "Requirement already satisfied: google-auth<2,>=1.6.3 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.11.0)\n",
      "Requirement already satisfied: requests<3,>=2.21.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.21.0)\n",
      "Requirement already satisfied: werkzeug>=0.11.15 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.14.1)\n",
      "Requirement already satisfied: google-auth-oauthlib<0.5,>=0.4.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.4.1)\n",
      "Requirement already satisfied: pyasn1-modules>=0.2.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.2.8)\n",
      "Requirement already satisfied: cachetools<5.0,>=2.0.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (4.0.0)\n",
      "Requirement already satisfied: rsa<4.1,>=3.1.4 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (4.0)\n",
      "Requirement already satisfied: certifi>=2017.4.17 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2019.11.28)\n",
      "Requirement already satisfied: urllib3<1.25,>=1.21.1 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.24.1)\n",
      "Requirement already satisfied: chardet<3.1.0,>=3.0.2 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.0.4)\n",
      "Requirement already satisfied: idna<2.9,>=2.5 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests<3,>=2.21.0->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (2.8)\n",
      "Requirement already satisfied: requests-oauthlib>=0.7.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (1.3.0)\n",
      "Requirement already satisfied: pyasn1<0.5.0,>=0.4.6 in /home/avinash/anaconda3/lib/python3.7/site-packages (from pyasn1-modules>=0.2.1->google-auth<2,>=1.6.3->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (0.4.8)\n",
      "Requirement already satisfied: oauthlib>=3.0.0 in /home/avinash/anaconda3/lib/python3.7/site-packages (from requests-oauthlib>=0.7.0->google-auth-oauthlib<0.5,>=0.4.1->tensorboard<2.2.0,>=2.1.0->tensorflow; extra == \"complete\"->dask-ml[complete]) (3.1.0)\n"
     ]
    }
   ],
   "source": [
    "!pip install dask-ml[xgboost] \n",
    "!pip install dask-ml[tensorflow]\n",
    "!pip install dask-ml[complete]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,\n",
       "       17])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# import Dask Array\n",
    "import dask.array as da    \n",
    "\n",
    "# Create Dask Array using arange() function and generate values from 0 to 17\n",
    "a = da.arange(18, chunks=4)\n",
    "\n",
    "# Compute the array\n",
    "a.compute() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((4, 4, 4, 4, 2),)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Check the chunk size\n",
    "a.chunks"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "1e2-Sbo6awGA"
   },
   "source": [
    "## Dask DataFrames"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 29 ms, sys: 8.28 ms, total: 37.3 ms\n",
      "Wall time: 139 ms\n"
     ]
    }
   ],
   "source": [
    "# Read csv file using  pandas\n",
    "import pandas as pd\n",
    "%time temp = pd.read_csv(\"HR_comma_sep.csv\") "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 51.2 ms, sys: 3.46 ms, total: 54.6 ms\n",
      "Wall time: 52.5 ms\n"
     ]
    }
   ],
   "source": [
    "# Read csv file using Dask\n",
    "import dask.dataframe as dd\n",
    "%time df = dd.read_csv(\"HR_comma_sep.csv\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### DataFrame Indexing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/avinash/anaconda3/lib/python3.7/site-packages/dask/dataframe/core.py:5890: UserWarning: Insufficient elements for `head`. 5 elements requested, only 3 elements available. Try passing larger `npartitions` to `head`.\n",
      "  warnings.warn(msg.format(n, len(r)))\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>P</th>\n",
       "      <th>Q</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>p</th>\n",
       "      <td>10</td>\n",
       "      <td>40</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>q</th>\n",
       "      <td>20</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>30</td>\n",
       "      <td>60</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    P   Q\n",
       "p  10  40\n",
       "q  20  50\n",
       "r  30  60"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask and Pandas DataFrame\n",
    "import dask.dataframe as dd\n",
    "import pandas as pd\n",
    "\n",
    "# Create Pandas DataFrame\n",
    "df = pd.DataFrame({\"P\": [10, 20, 30], \"Q\": [40, 50, 60]},\n",
    "                  index=['p', 'q', 'r'])\n",
    "\n",
    "# Create Dask DataFrame\n",
    "ddf = dd.from_pandas(df, npartitions=2)\n",
    "\n",
    "# Check top records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Dask Series Structure:\n",
       "npartitions=1\n",
       "p    int64\n",
       "r      ...\n",
       "Name: P, dtype: int64\n",
       "Dask Name: getitem, 2 tasks"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Single Column Selection\n",
    "ddf['P']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div><strong>Dask DataFrame Structure:</strong></div>\n",
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Q</th>\n",
       "      <th>P</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>npartitions=1</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>p</th>\n",
       "      <td>int64</td>\n",
       "      <td>int64</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>r</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>\n",
       "<div>Dask Name: getitem, 2 tasks</div>"
      ],
      "text/plain": [
       "Dask DataFrame Structure:\n",
       "                   Q      P\n",
       "npartitions=1              \n",
       "p              int64  int64\n",
       "r                ...    ...\n",
       "Dask Name: getitem, 2 tasks"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Multiple Column Selection\n",
    "ddf[['Q', 'P']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/avinash/anaconda3/lib/python3.7/site-packages/dask/dataframe/core.py:5890: UserWarning: Insufficient elements for `head`. 5 elements requested, only 3 elements available. Try passing larger `npartitions` to `head`.\n",
      "  warnings.warn(msg.format(n, len(r)))\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>X</th>\n",
       "      <th>Y</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>11</td>\n",
       "      <td>41</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>12</td>\n",
       "      <td>51</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>13</td>\n",
       "      <td>61</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    X   Y\n",
       "0  11  41\n",
       "1  12  51\n",
       "2  13  61"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask and Pandas DataFrame\n",
    "import dask.dataframe as dd\n",
    "import pandas as pd\n",
    "\n",
    "# Create Pandas DataFrame\n",
    "df = pd.DataFrame({\"X\": [11, 12, 13], \"Y\": [41, 51, 61]})\n",
    "\n",
    "# Create Dask DataFrame\n",
    "ddf = dd.from_pandas(df, npartitions=2)\n",
    "\n",
    "# Check top records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Y</th>\n",
       "      <th>X</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>41</td>\n",
       "      <td>11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>51</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>61</td>\n",
       "      <td>13</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    Y   X\n",
       "0  41  11\n",
       "1  51  12\n",
       "2  61  13"
      ]
     },
     "execution_count": 49,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ddf.iloc[:, [1, 0]].compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "ename": "NotImplementedError",
     "evalue": "'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'.",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNotImplementedError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-50-eddd43b5f4d8>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mddf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0miloc\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;36m4\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcompute\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m~/anaconda3/lib/python3.7/site-packages/dask/dataframe/indexing.py\u001b[0m in \u001b[0;36m__getitem__\u001b[0;34m(self, key)\u001b[0m\n\u001b[1;32m     57\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     58\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0miindexer\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mslice\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mNone\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 59\u001b[0;31m             \u001b[0;32mraise\u001b[0m \u001b[0mNotImplementedError\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmsg\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     60\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     61\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_iloc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0miindexer\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcindexer\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNotImplementedError\u001b[0m: 'DataFrame.iloc' only supports selecting columns. It must be used like 'df.iloc[:, column_indexer]'."
     ]
    }
   ],
   "source": [
    "ddf.iloc[0:4, [1, 0]].compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Filter data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "by3FWbKgawGY",
    "outputId": "e5650894-cd34-41cb-dbce-3959c1d763ff"
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.41</td>\n",
       "      <td>0.50</td>\n",
       "      <td>2</td>\n",
       "      <td>153</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.10</td>\n",
       "      <td>0.77</td>\n",
       "      <td>6</td>\n",
       "      <td>247</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "5                0.41             0.50               2                   153   \n",
       "6                0.10             0.77               6                   247   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "5                   3              0     1                      0   \n",
       "6                   4              0     1                      0   \n",
       "\n",
       "  Departments  salary  \n",
       "0        sales    low  \n",
       "3        sales    low  \n",
       "4        sales    low  \n",
       "5        sales    low  \n",
       "6        sales    low  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filter employee with low salary\n",
    "ddf2 = ddf[ddf.salary == 'low']\n",
    "ddf2.compute().head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>left</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.666810</td>\n",
       "      <td>0.715473</td>\n",
       "      <td>3.786664</td>\n",
       "      <td>199.060203</td>\n",
       "      <td>3.380032</td>\n",
       "      <td>0.175009</td>\n",
       "      <td>0.026251</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.440098</td>\n",
       "      <td>0.718113</td>\n",
       "      <td>3.855503</td>\n",
       "      <td>207.419210</td>\n",
       "      <td>3.876505</td>\n",
       "      <td>0.047326</td>\n",
       "      <td>0.005321</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      satisfaction_level  last_evaluation  number_project  \\\n",
       "left                                                        \n",
       "0               0.666810         0.715473        3.786664   \n",
       "1               0.440098         0.718113        3.855503   \n",
       "\n",
       "      average_montly_hours  time_spend_company  Work_accident  \\\n",
       "left                                                            \n",
       "0               199.060203            3.380032       0.175009   \n",
       "1               207.419210            3.876505       0.047326   \n",
       "\n",
       "      promotion_last_5years  \n",
       "left                         \n",
       "0                  0.026251  \n",
       "1                  0.005321  "
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Find average values of all the columns for employee left or stayed \n",
    "ddf.groupby('left').mean().compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Bags"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Creating Dask bag using Python Iterable items"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 2)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of list items\n",
    "items_bag = db.from_sequence([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], npartitions=3)\n",
    "\n",
    "# Take initial two items\n",
    "items_bag.take(2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 3, 5, 7, 9]"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Filter the bag of list items\n",
    "items_square=items_bag.filter(lambda x: x if x % 2 != 0 else None)\n",
    "\n",
    "# Compute the results\n",
    "items_square.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Square the bag of list items\n",
    "items_square=items_b.map(lambda x: x**2)\n",
    "\n",
    "# Compute the results\n",
    "items_square.compute()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Creating Dask Bag using text file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "('Hi! how are you? \\n', '\\n')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of text file\n",
    "text = db.read_text('sample.txt')\n",
    "\n",
    "# Show initial 1 items from text\n",
    "text.take(2)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Storing Dask Bag into text file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/home/avinash/Documents/notebooks/packt/ch14/0.txt.gz']"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Convert dask bag object into text file\n",
    "text.to_textfiles('*.txt.gz')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Storing Dask Bag into DataFrame"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>item_name</th>\n",
       "      <th>price</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Egg</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>Bread</td>\n",
       "      <td>20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>Milk</td>\n",
       "      <td>54</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  item_name  price\n",
       "0       Egg      5\n",
       "1     Bread     20\n",
       "0      Milk     54"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask bag\n",
    "import dask.bag as db\n",
    "\n",
    "# Create a bag of dictionary items\n",
    "dict_bag = db.from_sequence([{'item_name': 'Egg', 'price': 5},\n",
    "                      {'item_name': 'Bread', 'price': 20},\n",
    "                      {'item_name': 'Milk', 'price': 54}],\n",
    "                      npartitions=2)\n",
    "\n",
    "# Convert bag object into dataframe\n",
    "df = dict_bag.to_dataframe()\n",
    "\n",
    "# Execute the graph results\n",
    "df.compute()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Dask Delayed"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "33.0"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import dask delayed and compute\n",
    "from dask import delayed, compute\n",
    "\n",
    "# Create delayed function\n",
    "@delayed\n",
    "def cube(item):\n",
    "    return item ** 3\n",
    "\n",
    "# Create delayed function\n",
    "@delayed\n",
    "def average(items):\n",
    "    return sum(items)/len(items)\n",
    "\n",
    "# create a list\n",
    "item_list = [2, 3, 4]\n",
    "\n",
    "# Compute cube of given item list\n",
    "cube_list= [cube(i) for i in item_list]\n",
    "\n",
    "# Compute average of cube_list\n",
    "computation_graph = average(cube_list)\n",
    "\n",
    "# Compute the results\n",
    "computation_graph.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Visualize the graph\n",
    "computation_graph.visualize()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Preprocessing"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Scaling"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import MinMaxScaler\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "\n",
    "# Instantiate the MinMaxScaler Object\n",
    "scaler = MinMaxScaler(feature_range=(0, 100))\n",
    "\n",
    "# Fit the data on Scaler\n",
    "scaler.fit(ddf[['last_evaluation']])\n",
    "\n",
    "# Transform the data\n",
    "performance_score=scaler.transform(ddf[['last_evaluation']])\n",
    "\n",
    "# Let's see the scaled performance score\n",
    "performance_score"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Feature Encoding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read CSV file\n",
    "ddf = dd.read_csv('HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "ddf.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary_low</th>\n",
       "      <th>salary_medium</th>\n",
       "      <th>salary_high</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   salary_low  salary_medium  salary_high\n",
       "0         1.0            0.0          0.0\n",
       "1         0.0            1.0          0.0\n",
       "2         0.0            1.0          0.0\n",
       "3         1.0            0.0          0.0\n",
       "4         1.0            0.0          0.0"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Onehot Encoder\n",
    "from dask_ml.preprocessing import Categorizer\n",
    "from dask_ml.preprocessing import OneHotEncoder\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "# Create pipeline with Categorizer and OneHotEncoder\n",
    "pipe = make_pipeline(\n",
    "    Categorizer(), OneHotEncoder())\n",
    "\n",
    "# Fit and transform the Categorizer and OneHotEncoder\n",
    "pipe.fit(ddf[['salary',]])\n",
    "result=pipe.transform(ddf[['salary',]])\n",
    "\n",
    "# See top 5 records\n",
    "result.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   salary\n",
       "0       0\n",
       "1       1\n",
       "2       1\n",
       "3       0\n",
       "4       0"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Onehot Encoder\n",
    "from dask_ml.preprocessing import Categorizer\n",
    "from dask_ml.preprocessing import OrdinalEncoder\n",
    "from sklearn.pipeline import make_pipeline\n",
    "\n",
    "# Create pipeline with Categorizer and OrdinalEncoder\n",
    "pipe = make_pipeline(\n",
    "    Categorizer(), OrdinalEncoder())\n",
    "\n",
    "# Fit and transform the Categorizer and OneHotEncoder\n",
    "pipe.fit(ddf[['salary',]])\n",
    "result=pipe.transform(ddf[['salary',]])\n",
    "\n",
    "# Let's see encoded results\n",
    "result.head()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Machine Learning"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Parallel Computing using Scikit-learn "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask DataFrame\n",
    "import pandas as pd\n",
    "\n",
    "# Read CSV file\n",
    "df = pd.read_csv('/home/avinash/Documents/data/HR_comma_sep.csv')\n",
    "\n",
    "# See top 5 records\n",
    "df.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# select the feature and target columns\n",
    "data=df[['satisfaction_level', 'last_evaluation']]\n",
    "label=df['left']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import client\n",
    "from dask.distributed import Client \n",
    "\n",
    "# Instantiate the Client\n",
    "client = Client() "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.92\n"
     ]
    }
   ],
   "source": [
    "# import dask_ml.joblib\n",
    "from sklearn.externals.joblib import parallel_backend\n",
    "\n",
    "with parallel_backend('dask'):\n",
    "    # Write normal scikit-learn code here\n",
    "    from sklearn.ensemble import RandomForestClassifier \n",
    "    from sklearn.metrics import accuracy_score\n",
    "    from sklearn.model_selection import train_test_split\n",
    "    \n",
    "    # Split data into training and testing set\n",
    "    X_train, X_test, y_train, y_test = train_test_split(data, label, \n",
    "                                                    test_size=0.2, \n",
    "                                                    random_state=0)\n",
    "    # Instantiate RandomForest Model\n",
    "    model = RandomForestClassifier()\n",
    "    \n",
    "    # Fit the model\n",
    "    model.fit(X_train,y_train)\n",
    "    \n",
    "    # Predict the classes\n",
    "    y_pred = model.predict(X_test)\n",
    "    \n",
    "    # Find model accuracy\n",
    "    print(\"Accuracy:\",accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Reimplementing ML Algorithms for Dask"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Read CSV file using Dask\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read Human Resource Data\n",
    "ddf = dd.read_csv(\"HR_comma_sep.csv\")\n",
    "\n",
    "# Let's see top 5 records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=ddf[['satisfaction_level', 'last_evaluation']].to_dask_array(lengths=True)\n",
    "label=ddf['left'].to_dask_array(lengths=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import Dask based LogisticRegression \n",
    "from dask_ml.linear_model import LogisticRegression\n",
    "\n",
    "# Import accuracy score metric\n",
    "from sklearn.metrics import accuracy_score\n",
    "\n",
    "# Import Dask based train_test_split\n",
    "from dask_ml.model_selection import train_test_split\n",
    "\n",
    "# Divide the data into two parts: training and testing set\n",
    "X_train, X_test, y_train, y_test = train_test_split(data, label)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Accuracy: 0.752\n"
     ]
    }
   ],
   "source": [
    "# Create logistic regression model\n",
    "model = LogisticRegression()\n",
    "\n",
    "# Fit the model\n",
    "model.fit(X_train,y_train)\n",
    "\n",
    "# Predict the classes\n",
    "y_pred = model.predict(X_test)\n",
    "\n",
    "# Find model accuracy\n",
    "print(\"Accuracy:\",accuracy_score(y_test, y_pred))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Clustering"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>satisfaction_level</th>\n",
       "      <th>last_evaluation</th>\n",
       "      <th>number_project</th>\n",
       "      <th>average_montly_hours</th>\n",
       "      <th>time_spend_company</th>\n",
       "      <th>Work_accident</th>\n",
       "      <th>left</th>\n",
       "      <th>promotion_last_5years</th>\n",
       "      <th>Departments</th>\n",
       "      <th>salary</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.38</td>\n",
       "      <td>0.53</td>\n",
       "      <td>2</td>\n",
       "      <td>157</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.80</td>\n",
       "      <td>0.86</td>\n",
       "      <td>5</td>\n",
       "      <td>262</td>\n",
       "      <td>6</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.11</td>\n",
       "      <td>0.88</td>\n",
       "      <td>7</td>\n",
       "      <td>272</td>\n",
       "      <td>4</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>medium</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.72</td>\n",
       "      <td>0.87</td>\n",
       "      <td>5</td>\n",
       "      <td>223</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.37</td>\n",
       "      <td>0.52</td>\n",
       "      <td>2</td>\n",
       "      <td>159</td>\n",
       "      <td>3</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>sales</td>\n",
       "      <td>low</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   satisfaction_level  last_evaluation  number_project  average_montly_hours  \\\n",
       "0                0.38             0.53               2                   157   \n",
       "1                0.80             0.86               5                   262   \n",
       "2                0.11             0.88               7                   272   \n",
       "3                0.72             0.87               5                   223   \n",
       "4                0.37             0.52               2                   159   \n",
       "\n",
       "   time_spend_company  Work_accident  left  promotion_last_5years  \\\n",
       "0                   3              0     1                      0   \n",
       "1                   6              0     1                      0   \n",
       "2                   4              0     1                      0   \n",
       "3                   5              0     1                      0   \n",
       "4                   3              0     1                      0   \n",
       "\n",
       "  Departments   salary  \n",
       "0        sales     low  \n",
       "1        sales  medium  \n",
       "2        sales  medium  \n",
       "3        sales     low  \n",
       "4        sales     low  "
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Read CSV file using Dask\n",
    "import dask.dataframe as dd\n",
    "\n",
    "# Read Human Resource Data\n",
    "ddf = dd.read_csv(\"HR_comma_sep.csv\")\n",
    "\n",
    "# Let's see top 5 records\n",
    "ddf.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "data=ddf[['satisfaction_level', 'last_evaluation']].to_dask_array(lengths=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 1, 0, ..., 2, 0, 2], dtype=int32)"
      ]
     },
     "execution_count": 35,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Import Dask based Kmeans\n",
    "from dask_ml.cluster import KMeans\n",
    "\n",
    "# Create the Kmeans model\n",
    "model=KMeans(n_clusters=3)\n",
    "\n",
    "# Fit the model \n",
    "model.fit(data)\n",
    "\n",
    "# Predict the classes\n",
    "label=model.labels_\n",
    "\n",
    "# Compute the results\n",
    "label.compute()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "colab": {},
    "colab_type": "code",
    "id": "dV_zRIElawQg",
    "outputId": "d39cfd0f-c59d-455d-b5c9-151648225d38"
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Import matplotlib.pylpot\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Prepare x,y and cluster_labels\n",
    "x=data[:,0].compute()\n",
    "y=data[:,1].compute()\n",
    "cluster_labels=label.compute()\n",
    "\n",
    "# Draw scatter plot\n",
    "plt.scatter(x,y, c=cluster_labels)\n",
    "\n",
    "# Add label on X-axis\n",
    "plt.xlabel('Satisfaction Level')\n",
    "\n",
    "# Add label on X-axis\n",
    "plt.ylabel('Performance Level')\n",
    "\n",
    "# Add a title to the graph\n",
    "plt.title('Groups of employees who left the Company')\n",
    "\n",
    "# Show the plot\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "collapsed_sections": [],
   "name": "Dask-1.ipynb",
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
